import { StringIndex } from "@/types";
// 摩尔斯电码映射表
const MORSE_MAP: StringIndex<string> = {
  "a": '.-',
  "b": '-...',
  "c": '-.-.',
  "d": '-..',
  "e": '.',
  "f": '..-.',
  "g": '--.',
  "h": '....',
  "i": '..',
  "j": '.---',
  "k": '-.-',
  "l": '.-..',
  "m": '--',
  "n": '-.',
  "o": '---',
  "p": '.--.',
  "q": '--.-',
  "r": '.-.',
  "s": '...',
  "t": '-',
  "u": '..-',
  "v": '...-',
  "w": '.--',
  "x": '-..-',
  "y": '-.--',
  "z": '--..',
  "1": ".----",
  "2": "..---",
  "3": "...--",
  "4": "....-",
  "5": ".....",
  "6": "-....",
  "7": "--...",
  "8": "---..",
  "9": "----.",
  "0": "-----",
  ".": ".-.-.-",
  ":": "---...",
  ",": "--..--",
  ";": "-.-.-.",
  "?": "..--..",
  "=": "-...-",
  "'": ".----.",
  "/": "-..-.",
  "!": "-.-.--",
  "-": "-....-",
  "_": "..-.-",
  "\"": ".-..-.",
  "(": "-.--.",
  ")": "-.--.-",
  "$": "...-..-",
  "&": "......",
  "@": ".--.-.",
}
const morseMaps = Object.values(MORSE_MAP);
const morseToPY = Object.keys(MORSE_MAP);

/**
 * morse码转换成字母
 * 
 * 每个morse结束都需要输入/
 * 
 * @param morseText 输入的morse码
 * @returns 
 */
export const morseParse = (morseText: string): string => {
  const morseItems = morseText.split('/');
  const res = morseItems.map(item => {
    const index = morseMaps.findIndex((morse) => {
      return item.trim() === morse.trim();
    })
    return index < 0 ? "#" : morseToPY[index];
  }).join('');
  return res;
}

/**
 * 字母转换成morse码
 * @param py 输入的字母
 * @returns 
 */
export const letterToMorse = (py: string): string => {
  const letters: string[] = py.split('');
  const res: string = letters.map((letter) => {
    return MORSE_MAP[letter];
  }).join('/');
  return res;
}

/**
 * 获取映射表
 * @returns 
 */
export const getMap = (): StringIndex<string> => {
  return MORSE_MAP;
}
